// 这是UDP通信的客户端，在该UDP通信中使用本地IP地址(127.0.0.1)进行通信
// 因为我无法连接到路由上
// 因为指定本地IP地址进行通信，所以不在使用argv进行IP地址的接收
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <unistd.h>
#include <sys/types.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <time.h>

// 制定端口号、请求队列中的允许请求数、缓冲区大小
#define SERV_PORT 25555
#define BACKLOG 20
#define BUF_SIZE 256

int main(int argc, char *argv[]){
	
	// 创建变量，用来接收返回的结果
	int ret,sockfd,clientfd;

	// 定义时间结构体
	time_t tt;
	struct tm *ttm;

	// 创建客户的信息
	struct sockaddr_in serv_addr,host_addr;

	char buf[BUF_SIZE];

	pid_t pid;
	
	int length = sizeof(serv_addr);

	// 创建套接字,TCP/IP协议，数据流套接字
	sockfd = socket(AF_INET,SOCK_DGRAM ,0);
	if(sockfd == -1){
		printf("套接字创建失败!\n");
		return 1;
	}
	printf("套接字创建成功!\n");

	// 在进行UDP传输的时候，无需使用bind函数进行绑定,直接使用sendto函数进行传输
	serv_addr.sin_family = AF_INET;		// TCP/IP设定,这里和TCP通信一样，但是后面的设定为无连接的
	serv_addr.sin_port = htons(SERV_PORT);
	serv_addr.sin_addr.s_addr = INADDR_ANY;	// 使用回环地址127.0.0.1
	
	while(1){
		// 每次发送前需要情况缓冲区
		bzero(buf,sizeof(buf));
		
		// 获取当前时间，并写入到缓冲区中
		tt = time(NULL);
		ttm = localtime(&tt);
		strcpy(buf,asctime(ttm));
		
		clientfd = sendto(sockfd,buf,strlen(buf), 0, (struct sockaddr *)&serv_addr,sizeof(serv_addr));
		// 接收数据，然后放入缓冲区
		sleep(2);

		//if(clientfd == -1){
		//	printf("发送失败!\n");
		//	return 3;
		//}

	}

	close(sockfd);
	return 0;

}
